perm filename MINSER.VLI[VLI,LSP] blob sn#382031 filedate 1978-09-08 generic text, type C, neo UTF8
COMMENT āŠ—   VALID 00002 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	  Mini-series 
C00005 ENDMK
CāŠ—;
 ; Mini-series ;

(DM SETA (call)
   (RPLACB call ['SET ['NTH (CADDR call) (CADR call)]
		  (CADDDR call)]))

(DM ELM (call) (RPLACB  call
   ['CAR ['NTH (CADDR call) (CADR call)]]))

(DM SEND (call) (RPLACB call
   ['SETQ '#target (CADR call) '#msg (CADDR call)])))))

(DE M-SERIES (let)
   (SETQ ls 0 lk 0 status () start 0 3-uples NIL)
   (SEND '$initialiser let)
   (WHILE (NEQ #target '$fini)  ; loop loop loop ;
      (#target #msg))
    (PRINT #msg let)
    (PRINT '3-uples 3-uples)
    'OK)

(DE $initialiser (let)
   (IF (NULL let) (SEND '$newstart (ADD1 start))
	(SETQ lk (ADD1 lk) status (CONS NIL status))
      	(IF (NEQ (NEXTL let) '?) (SETQ ls (ADD1 ls)))
	($initialiser let)))))))))

(DE $newstart (msg)
   (SETQ start msg)
   (COND
	((GT start lk) (SEND '$fini 'succes))
	((ELM status start) ($newstart (ADD1 start)))
	(T (SEND '$newmove 1))))))))

(DE $newmove (msg)
   (SETQ move msg)
   (IF (GT (PLUS start move move) ls) (SEND '$fini 'echec)
	(SETQ inc (DIFFER (SETQ predicted (ELM let (PLUS start move)))
			(ELM let start))
	      predicted (PLUS predicted inc)) 
	(SEND '$verifier (PLUS start move move)))))))))))

(DE $verifier (x) (COND
   ((GT x LS)
	(SETQ 3-uples (CONS [start move inc] 3-uples))
	(SEND '$completer start))
   ((NEQ predicted (ELM let x)) (SEND '$newmove (ADD1 move)))
   (T (SETQ predicted (PLUS predicted inc))
	($verifier (PLUS x move)))))))))))

(DE $completer (x)
   (IF (GT x lk) (SEND '$newstart (ADD1 start))
	(SETA  status  x T)
	(AND (GT x ls)
	   (SETA let x predicted)
	   (SETQ predicted (PLUS predicted inc)))
	($completer  (PLUS x move))))))))))

(PRINT "Lancer avec (M-SERIES '(x x x x ? ? ?)).")